﻿#define  _CRT_SECURE_NO_WARNINGS 
//#include<stdio.h>
//#include<stdlib.h>
//#include<assert.h>
//#include<ctype.h>
//int my_atoi(const char* str)
//{
//	//判断传进来的字符指针的有效性，空指针无法进行访问与使用
//	assert(str);
//
//	//判断传进来的字符是否为空字符，是则返回0
//	if (*str == '\0')
//	{
//		return 0;
//	}
//
//	//判断传进来的数字是否是空白字符
//	while (isspace(*str))
//	{
//		str++;
//	}
//
//	//判断正负号
//	int flag = 1;
//	if (*str == '+')
//	{
//		str++;
//	}
//	else if (*str == '-')
//	{
//		flag = -1;
//		str++;
//	}
//
//
//	//判断是否是字符数字
//	long long  ret = 0;
//	while (*str != '\0')
//	{
//		if (isdigit(*str))
//		{
//			//将字符数字转换为整型数据的数字
//			ret = ret * 10 + (*str - '0') * flag;
//			//                得到的是整型数字      整体的则是具有个位，十位，百位这种进制形式的
//			
//			//判断是否超过了整型的最大值和最小值
//			if (ret > INT_MAX)
//			{
//				ret = INT_MAX;
//			}
//			if (ret < INT_MIN)
//			{
//				ret = INT_MIN;
//			}
//		}
//		else
//		{
//			return (int)ret;
//		}
//		str++;
//	}
//
//	return (int)ret;
//
//}
//int main0()
//{
//	char arr[] = "  9999999999999999999999999999";
//	int ret = my_atoi(arr);
//	printf("%d", ret);
//	return 0;
//}
//
//
//
////文件的随机读写
///*
//* fseek:根据文件指针的位置和偏移量来定位文件指针（文件内容的光标）
//* 函数原型：int fseek ( FILE * stream, long int offset, int origin );
//*                         文件流          偏移量          起始位置：三个值可以选择，SEEK_SET（文件起始位置）、SEEK_CUR（文件指针当前位置）、SEEK_END（文件末尾）
//* 这里是改变光标指向的位置，而不是获取字符，获取字符还得使用fgetc
//*/
//
//int main2()
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	
//	//abcdef
//	//读取文件
//	int ch = fgetc(pf);
//	printf("%c\n",ch);
//
//	fseek(pf, -1, SEEK_END);
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//
///*
//* ftell：返回文件指针相对于起始位置的偏移量
//* 函数原型：long int ftell ( FILE * stream );
//*/
//
//int main3()
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//abcdef
//	//读取文件
//	fseek(pf, -1, SEEK_END);
//	int ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	long x= ftell(pf);
//	printf("%d\n", x);
//
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//
///*
//* rewind:让文件指针回到文件起始位置
//* 函数原型：void rewind ( FILE * stream );
//*/
//
//
//int main4()
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//abcdef
//	//读取文件
//	//改变文件的位置
//	fseek(pf, -1, SEEK_END);
//	int ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//回到起始位置
//	rewind(pf);
//
//	//打印文件指针当前位置相对于起始位置的偏移量
//	long x = ftell(pf);
//	printf("%d\n", x);
//
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//
//
///*
//* feof：该函数不是判断文件结尾的，而是判断导致文件读取结束，是不是由文件结尾导致的结束的
//* fgetc:返回值为EOF，读取结束则返回EOF，但是读取结束有两种情况会导致读取结束，第一种：读取到文件末尾导致读取结束，第二种：读取发生错误而导致读取结束
//*/
//
//int main5()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读取
//	int ch = 0;
//	while ((ch = getc(pf)) != EOF)
//	{
//		putchar(ch);
//		printf("\n");
//	}
//
//	if (feof(pf))
//	{
//		printf("读取数据正常\n");
//	}
//	else if (ferror(pf))
//	{
//		printf("读取文件发生异常，读取失败\n");
//	}
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//
//#include <stdio.h>
//#include <windows.h>
////VS2019 WIN11环境测试
//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	fputs("abcdef", pf);//先将代码放在输出缓冲区
//	printf("睡眠10秒-已经写数据了，打开test.txt文件，发现文件没有内容\n");
//	Sleep(10000);
//	printf("刷新缓冲区\n");
//	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘）
//	//注：fflush 在⾼版本的VS上不能使⽤了
//	printf("再睡眠10秒-此时，再次打开test.txt文件，文件有内容了\n");
//	Sleep(10000);
//	fclose(pf);
//	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
//	pf = NULL;
//	return 0;
//}





